<?php
/**
 * 异常处理类 Exceptions
 *
 * 用于处理程序发生错误时的操作
 */

class Exceptions {

	/**
	 * 错误输出函数
	 *
	 * 用于格式化的输出错误内容
	 *
	 * @param string $type 异常类型(error/warning) , string $header 错误框头部信息 , string $msg 错误的信息 , int $code 错误代码 , string $filePath 错误的文件路径 , int $line 错误的行数 , string $template 错误模板名称
	 * @return void $this->db将获得一个null
	 */

	public function showError($type, $header, $msg, $code, $filePath, $line, $template) {
		$code = (int)$code;
		$errorPagePath = SYSPATH . 'errorPages/' . $template . '.php';
		setStatus($code);
		if(!file_exists($errorPagePath)) {
			echo '<h3>找不到错误页面模板 <strong>' . $template . '</strong></h3>';
			exit(1);
		}
		ob_start();
		include $errorPagePath;
		$errorPageContent = ob_get_contents();
		ob_end_clean();
		$errorPageContent = $this->setParams($errorPageContent, array(
			'barSuffix' => getConfigItem('barSuffix'),
			'keyWords' => getConfigItem('keyWords'),
			'descriptions' => getConfigItem('descriptions'),
			'baseDir' => BASEDIR,
			'type' => $type,
			'header' => $header,
			'msg' => $msg,
			'code' => $code,
			'filePath' => $filePath,
			'line' => $line
		));
		return $errorPageContent;
	}

	/**
	 * 模板数据设置函数
	 *
	 * 用于为模板设置数据值
	 *
	 * @param string $pageContent 页面内容 , array $params 数据数组
	 * @return string 设置完数据的页面内容
	 */

	protected function setParams($pageContent, $params = array()) {
		foreach($params as $key => $val) {
			if($key == 'keyWords' || $key == 'descriptions') {
				$pageContent = str_replace('[' . $key . ']', '"' . $val . '"', $pageContent);
			}
			else {
				$pageContent = str_replace('[' . $key . ']', $val, $pageContent);
			}
		}
		return $pageContent;
	}
}